<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>数组</title>
</head>
<body>
	<script>
		var a = [];
		console.log(a);//[]
		a[0] = 1;
		a[1] = 2;
		console.log(a);[1,2]

		//数组末尾插入一个元素
		console.log(a.push(3));//返回新数组的长度
		console.log(a);//[1,2,3]

		//数组头部插入元素
		a.unshift(4);//反水新数组的长度 4
		console.log(a);//[4,1,2,3]

		//末尾删除一个元素，并返回被删除的值		
		console.log(a.pop());//3
		console.log(a);//[4,1,2]

		//头部删除一个元素，并返回被删除的值
		console.log(a.shift());//4
		console.log(a);//[1,2]

		//join()将数组中所有元素都转化为字符串并连接在一起，返回最后生成的字符串
		console.log(a.join('-'));//1-2
		console.log(a);//[1,2]

		//reverse()将数组中的元素颠倒顺序，返回逆序的数组
		console.log(a.reverse());//[2,1]
		console.log(a);//[2,1]

		//sort()将数组中的元素排序并返回排序后的数组

		//用字母表排序
		var b = new Array("banana","cherry","apple");
		b.sort();
		console.log(b);

		//用数值大小排序
		var c = new Array(22,11,55,66,44,33);
		c.sort(function (n,m) {
			return n-m
		});
		console.log(c);

		//不区分大小写的排序
		var d = new Array("ant","Bug","Console","dubber");
		d.sort();//区分大小写
		console.log(d);
		d.sort(function(s,t){  //不区分大小写
			var n = s.toLowerCase();
			var m = t.toLowerCase();
			if(n<m){return -1}
			if(n>m){return 1}
				return 0
		});
		console.log(d);

		//concat()创建一个新数组。他的元素包含原始数组和concat的每个参数,原始数组不改变
		console.log(a.concat(4,5,6,7));
		console.log(a);


		//slice()返回一个指定数组的片段或子数组，参数指定了片段开始和结束的位置
		console.log(a.concat(4,5,6,7).slice(1,3));//[1,4]
		console.log(a.concat(4,5,6,7).slice(3,-1));//[5,6]


		//splice()是在数组中插入或删除元素的通用方法 第一个参数指定 插入或删除的起始位置 第二个参数指定了从数组中删除元素的个数 其后的任意个数的参数指定了需要插入到数组中的元素
		console.log(a.splice(2,0,5,6));//[]
		console.log(a);//2,1,5,6
		console.log(a.splice(1,2));//[1,5]
		console.log(a);//2,6


		//map()将调用的数组的每个元素传递给指定的函数，并返回一个数组

		var mapArray = [1,2,3,4,5];
		var bMap = mapArray.map(function(x){return x*x});
		console.log(mapArray);
		console.log(bMap);

		//filter()方法返回的数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的：该函数返回true或false

		smallMap = mapArray.filter(function(x){return x<3});
		otherMap = mapArray.filter(function(x,i){console.log(i);return i%2 == 0});//i是数组的索引

		console.log(smallMap);
		console.log(otherMap);


		//every() 和 some()

		console.log(mapArray.every(function(x){return x<10}));//当且仅当数组中的所有元素调用函数都返回true 才返回true
		console.log(mapArray.some(function(x){return x%2 === 0}));//当数组中至少有一个元素调用函数返回true就返回true 当所有的元素调用函数都返回false才返回false


		//reduce()和reduceRight()
		console.log(mapArray.reduce(function(x,y){return x+y},0));//第一个参数是执行化简操作的函数，第二个参数是传递给函数的初始值


		//indexOf()和lastIndexOf() 搜索整个数组中给定值的元素，返回找到的第一个元素的索引 没有找到就返回-1
	</script>
</body>
</html>